按钮变得不可见

时间:2016-04-22 16:55:01

标签: java swing

当我下降然后返回时,按钮消失。我不知道为什么......对此我有什么建议吗?我尝试在google / stackoverflow中搜索,但我还没有找到答案。无论如何,我对这个问题没有任何想法,我尝试了一切

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

public class GenerateExam extends JFrame {

private JPanel contentPane;
private JButton button;

public GenerateExam() {
    setTitle("Test");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(0, 0, 800, 600);
    button = new JButton("Click me!");
    button.setBounds(50, 100, 100, 200);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    contentPane.add(button);

    setContentPane(contentPane);
    JPanel container = new JPanel();
    JScrollPane jsp = new JScrollPane(container);
    jsp.getVerticalScrollBar().setUnitIncrement(16);
    container.setPreferredSize(new Dimension(750, 4000));
    container.setLayout(null);

    getContentPane().add(jsp);
    centerFrame();

}

private void centerFrame() {
    Dimension windowSize = getSize();
    GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Point centerPoint = g.getCenterPoint();

    int dx = centerPoint.x - windowSize.width / 2;
    int dy = centerPoint.y - windowSize.height / 2;
    setLocation(dx, dy);
}

public static void main(String[] args) { 
    GenerateExam exam = new GenerateExam();
    exam.setVisible(true);
}

}

1 个答案:

答案 0 :(得分:1)

contentPane.setLayout(new BorderLayout(0, 0));
contentPane.add(button);

setContentPane(contentPane);
JPanel container = new JPanel();
JScrollPane jsp = new JScrollPane(container);
jsp.getVerticalScrollBar().setUnitIncrement(16);
container.setPreferredSize(new Dimension(750, 4000));
container.setLayout(null);

getContentPane().add(jsp);
  1. 您将内容窗格设置为具有BorderLayout。
  2. 然后将“按钮”添加到contentPane,将“jsp”添加到contentPane。 3.问题是您没有指定约束,因此两个组件都添加到“CENTER”。但是,“CENTER”中只能显示单个组件,因此仅显示滚动窗格。
  3. 但是,滚动窗格包含一个空面板,没有什么可看的。
  4. 不确定你要做什么,但你可以尝试类似的事情:

    JPanel contentPane = new JPanel( new BorderLayout() );
    setContentPane( contentPane );
    
    JButton button = new JButton("Click Me");
    add(button, BorderLayout.PAGE_START);
    
    JScrollPane scrollPane = new JScrollPane( new JTextArea(10, 40) );
    add(scrollPane, BorderLayout.CENTER);
    
    pack();
    setLocationRelativeTo(null); // this will center the frame
    

    不要:

    1. 使用空布局
    2. 使用setBounds()
    3. 使用setPreferredSize()