मैं निम्नलिखित जीयूआई बनाने के लिए कोशिश कर रहा हूँ:GridBagLayout काम नहीं कर रहा Gridding
लेकिन जीयूआई है कि मैं कर रहा है:
क्या मेरी ग्रिड लगता है:
मुझे समझ में नहीं आ रहा है कि मुझे यह आउटपुट क्यों मिल रहा है क्योंकि मैंने कोड की सहायता के लिए एक आरेख तैयार किया है और ऐसा लगता है कि यह काम करता है।
विधि addComp जोड़ता इनपुट इनपुट में इनपुट घटक को किसी दिए गए (x, y) स्थिति और किसी दिए गए घटक चौड़ाई और ऊंचाई पर जोड़ता है।
कोड:
import javax.swing.*;
import java.awt.*;
public class GUIError extends JFrame {
//initialise all the components
JPanel mainPanel = new JPanel();
JTextField txtDisplay = new JTextField();
JButton btnA = new JButton("A");
JButton btnB = new JButton("B");
JButton btnC = new JButton("C");
JButton btnD = new JButton("D");
JButton btnE = new JButton("E");
JButton btnF = new JButton("F");
JButton btnWA = new JButton("WA");
JButton btnWB = new JButton("WB");
JButton btnWC = new JButton("WC");
JButton btnWD = new JButton("WD");
private void addComp(JPanel panel, JComponent comp, int xPos, int yPos, int compWidth, int compHeight) {
GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = xPos;
gridConstraints.gridy = yPos;
gridConstraints.gridwidth = compWidth;
gridConstraints.gridheight = compHeight;
gridConstraints.weightx = 0.5;
gridConstraints.weighty = 0.5;
gridConstraints.insets = new Insets(5, 5, 5, 5);
gridConstraints.anchor = GridBagConstraints.CENTER;
gridConstraints.fill = GridBagConstraints.BOTH;
panel.add(comp, gridConstraints);
}
public static void main(String[] args) {
try {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
catch (Exception e) { }
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// create frame
JFrame frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
Container c = frame.getContentPane();
// create GUI within frame
new GUIError(c);
// finish frame definition
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
});
}
public GUIError(Container cont) {
cont.setPreferredSize(new Dimension(610, 250));
// parent panel containes every other panel
mainPanel.setLayout(new GridBagLayout());
// text display
txtDisplay.setEditable(false);
addComp(mainPanel, txtDisplay, 0, 0, 12, 2); // width 16, height 2
addComp(mainPanel, btnA, 0, 2, 2, 1);
addComp(mainPanel, btnB, 2, 2, 2, 1);
addComp(mainPanel, btnC, 4, 2, 2, 1);
addComp(mainPanel, btnD, 6, 2, 2, 1);
addComp(mainPanel, btnE, 8, 2, 2, 1);
addComp(mainPanel, btnF, 10, 2, 2, 1);
addComp(mainPanel, btnWA, 0, 3, 3, 1);
addComp(mainPanel, btnWB, 3, 3, 3, 1);
addComp(mainPanel, btnWC, 6, 3, 3, 1);
addComp(mainPanel, btnWD, 9, 3, 3, 1);
cont.add(mainPanel);
}
}
जीबीसी कॉलम आधारित है, प्रश्न के लिए +1 और एसएससीसीई/एमसीवीई, कारण मिगलाउट (ई.आई.) विकसित किए गए हैं – mKorbel
ऐसा नहीं लगता कि आप इसे केवल 1 पैनल के साथ प्राप्त कर सकते हैं। जहां तक मुझे पता है, 'ग्रिडविड्थ' आधा ग्रिड निर्दिष्ट नहीं कर सकता है। मुझे लगता है कि सबसे अच्छा विकल्प या तो एक अलग लेआउट का उपयोग करना होगा, या अपने घटकों को अलग-अलग पैनलों में अलग करना होगा (मुख्य पैनल में शीर्ष पर एक फ़ील्ड और नीचे 2 पैनल (साइड साइड) शामिल हैं। प्रत्येक उप-पैनल में 2 पैनल होते हैं: 3 के लिए एक छोटे बटन, इसके नीचे 2 बड़े बटन वाले) –
मैंने ग्रिडविड्थ का उपयोग करके आधा ग्रिड निर्दिष्ट नहीं किया है। बटन की पहली पंक्ति ग्रिडविड्थ = 2 है और बटन की तीसरी पंक्ति ग्रिडविड्थ = 3. है, मुझे समझ में नहीं आता कि नीचे 3 छोटे और 2 बड़े बटनों का क्या मतलब है? मैंने जिस ग्रिड को भी लिंक किया है, उस ग्रिड को प्रदर्शित करता है जिसे मैंने इस स्थिति में उपयोग किया है। बटन की दूसरी पंक्ति सभी समान आकार हैं, बटन की तीसरी पंक्ति सभी समान आकार हैं। मुझे समझ में नहीं आता कि यह GridBagLayout के साथ क्यों काम नहीं करेगा। – user3749872