2016-04-22 177 views
0

當我走下然後返回時,按鈕消失。我不知道爲什麼......有沒有關於這方面的任何建議?我試過在谷歌/ 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); 
} 

}

+0

由於使用佈局管理器,button.setBounds(...)不起作用。 – FredK

+0

我的意思是,最好的答案是:在IDE中使用此代碼並查看按鈕,向下滾動並向上滾動按鈕不可見 – Hundasse

回答

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」中,因此只顯示滾動窗格。
  3. 但是,scrollpane包含一個空的面板,沒有什麼可看的。

不是真的知道你正在嘗試做的,但你可以嘗試這樣的:

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()