मैं जेबटन टेक्स्ट के फ़ॉन्ट आकार को स्वचालित रूप से बढ़ाने/घटाने की कोशिश कर रहा हूं (यदि जेबटन अपने टेक्स्ट को बढ़ाता है तो बढ़ाएगा, यदि जेबटन अपने टेक्स्ट को कम करता है तो भी कम हो जाएगा)। जेबट्टन का डिफ़ॉल्ट फ़ॉन्ट सैन्स-सेरिफ़ आकार 20 होगा और यह 20 से नीचे कभी भी कम नहीं हो सकता है (यह 21, 30, 40 या 20 से ऊपर या उसके बराबर कुछ भी हो सकता है लेकिन 20 से कम कुछ भी नहीं)। मेरे पास एक जेपीनेल है, जिसे मेन्यूजेनल कहा जाता है, यह ग्रिडलाउट का उपयोग 5 जेबूटन जोड़ने के लिए करता है जो जेपीनेल बढ़ने/मृतकों के आकार में वृद्धि/कमी करेगा। मैंने ग्रिडलाउट चुना क्योंकि यह इस उद्देश्य के लिए सबसे अच्छा लेआउट प्रतीत होता है, क्या मैं गलत हूं? मैंने मेनू जेपीनेल में एक घटक भी जोड़ा है। नीचे आप मेरा कोड देख सकते हैं जो आंशिक रूप से काम करता है।जेबटन के आकार के आधार पर जेबटन टेक्स्ट के आकार को स्वचालित रूप से कैसे बढ़ाया या धोखा देना है?
public class MenuJPanel extends JPanel {
private JButton resizeBtn1;
private JButton resizeBtn2;
private JButton resizeBtn3;
private JButton resizeBtn4;
private JButton resizeBtn5;
public MenuJPanel() {
initComponents();
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Font btnFont = resizeBtn1.getFont();
String btnText = resizeBtn1.getText();
int stringWidth = resizeBtn1.getFontMetrics(btnFont).stringWidth(btnText);
int componentWidth = resizeBtn1.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double) componentWidth/(double) stringWidth;
int newFontSize = (int) (btnFont.getSize() * widthRatio);
int componentHeight = resizeBtn1.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label's font size to the newly determined size.
resizeBtn1.setFont(new Font(btnFont.getName(), Font.BOLD, fontSizeToUse));
}
});
}
private void initComponents() {
resizeBtn1 = new javax.swing.JButton();
resizeBtn2 = new javax.swing.JButton();
resizeBtn3 = new javax.swing.JButton();
resizeBtn4 = new javax.swing.JButton();
resizeBtn5 = new javax.swing.JButton();
setLayout(new java.awt.GridLayout(5, 0));
resizeBtn1.setText("Text to resize 1");
add(resizeBtn1);
resizeBtn2.setText("Text to resize 2");
add(resizeBtn2);
resizeBtn3.setText("Text to resize 3");
add(resizeBtn3);
resizeBtn4.setText("Text to resize 4");
add(resizeBtn4);
resizeBtn5.setText("Text to resize 5");
add(resizeBtn5);
}
}
आपकी समस्या यह है कि आपने एक एसएससीसीई पोस्ट नहीं किया है, क्या बीटीएन ओपेरेटर लोगआउट, जहां मुख्य वर्ग में, माफी आलसी मुझे भी हराती है, बीटीडब्ल्यू इस साधारण मुद्दे को इस मंच पर कई बार हल किया गया था, मैं DeriveFont के लिए कुछ कोड देख सकता हूं और जेएलएबल – mKorbel
धन्यवाद, मैंने बस उदाहरण कोड – jadrijan
तय किया है, क्या आप आंतरिक क्षेत्र की गणना करने में सक्षम हैं (जेबटन के बारे में लाइन देखें यदि) चुना गया है अर्थात् जेबटन से इंससेट प्राप्त करें और सीमाओं के लिए 1 पिक्सेल घटाएं (जेबटन के बारे में लाइन देखें, तो परिणाम SwingUtilities # computeStringWidht के लिए आयाम उपलब्ध है :-) – mKorbel