虽然生成滑块的语句已放入代码中,但滑块不会出现在GUI中。我需要修改或添加滑块的代码才能出现在GUI中?除滑块外,程序中定义的所有其他Swing组件都会出现。
package pkTopic5T15;
import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Topic5T15 {
public int top1 = 60;
public int top2 = 300;
public JPanel pnlLeft;
public JPanel pnlRight;
public int Initialht1 = 100;
public int Initialht2 = 100;
public JSlider sldChangePanels;
public static void main(String[] args) {
Topic5T15 My515 = new Topic5T15();
My515.go();
}
public void go() {
GUI515 My515 = new GUI515();
}
class GUI515 extends JFrame {
private JLabel lblHeading;
private JButton btnPanLeft;
private JButton btnPanRight;
public int ht1;
public int ht2;
protected GUI515() {
this.setSize(800, 900);
this.setLocation(100, 100);
this.setTitle("515");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
Font f1 = new Font("Monospaced", Font.BOLD, 16);
Font f2 = new Font("Dialog", Font.BOLD, 24);
lblHeading = new JLabel("Testing Panels");
lblHeading.setBounds(10, 10, 300, 50);
lblHeading.setFont(f2);
pnlLeft = new JPanel();
pnlLeft.setLayout(null);
pnlLeft.setBounds(10, top1, 300, Initialht1);
pnlLeft.setBackground(Color.RED);
btnPanLeft = new JButton("One");
btnPanLeft.setFont(f1);
btnPanLeft.setBounds(0, 0, 100, 50);
ClickOne c = new ClickOne();
btnPanLeft.addActionListener(c);
pnlLeft.add(btnPanLeft);
this.add(pnlLeft);
pnlRight = new JPanel();
pnlRight.setLayout(null);
pnlRight.setBounds(350, top2, 300, Initialht2);
pnlRight.setBackground(Color.GREEN);
btnPanRight = new JButton("Two");
btnPanRight.setBounds(0, 0, 100, 50);
btnPanRight.setFont(f1);
btnPanRight.addActionListener(c);
pnlRight.add(btnPanRight);
this.add(pnlRight);
sldChangePanels = new JSlider(-100, 100, 1);
sldChangePanels.setBounds(50, 800, 400, 50);
sldChangePanels.setMajorTickSpacing(20);
sldChangePanels.setPaintLabels(true);
SliderListener slis = new SliderListener();
sldChangePanels.addChangeListener(slis);
this.add(sldChangePanels);
this.add(lblHeading);
this.setVisible(true);
}
private class ClickOne implements ActionListener
// This is an inner class; contained within GUI
{
protected ClickOne() {
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnPanLeft) {
btnPanLeft.setText("OUCH1");
top1 = top1 + 20;
pnlLeft.setBounds(10, top1, 300, 100);
}
if (e.getSource() == btnPanRight) {
btnPanRight.setText("OUCH2");
top2 = top2 - 20;
pnlRight.setBounds(350, top2, 300, 100);
}
}
}
private class SliderListener implements ChangeListener
// This is an inner class; contained within GUI
{
protected SliderListener() {
}
public void stateChanged(ChangeEvent e) {
ht1 = Initialht1 + sldChangePanels.getValue();
ht2 = Initialht2 - sldChangePanels.getValue();
pnlLeft.setBounds(10, top1, 300, ht1);
pnlRight.setBounds(350, top2, 300, ht2);
}
}
}
}
答案 0 :(得分:4)
不要使用null
布局(如果使用的话),然后设置代码中滑块缺少的每个组件的边界。这就是滑块的原因没有出现。
使用适当的布局并重新设计您的应用程序。
值得一读A Visual Guide to Layout Managers
使用SwingUtilities.invokeLater()
确保EDT已正确初始化。
了解更多
答案 1 :(得分:1)
使用GUI编程,很多时候,元素正在渲染但却看不到。例如,它们被渲染到屏幕之外,或者在窗口的可见部分之外,或者它们被渲染但是它们被其他元素隐藏,或者它们以零大小渲染。
检查这些是否属实。
HTH。