JavaアプリケーションでJScrollPane
を使用すると少し問題があります。JScrollPaneスクロールバーが表示されているときにJPanelを含むサイズ変更
JScrollPane
にはJPanel
が含まれています。 このJPanel
は、任意の幅のボタン(垂直順序)で動的に更新されます。 JPanel
は、幅が自動的に内側のJButton
コンポーネントに調整されます。
垂直スクロールバーが表示されると、JPanel
の右側のスペースが取り除かれ、最大のボタンが完全に表示されなくなります。私は、ボタン全体を表示するだけでなく、水平スクロールバーを使用したくありません。
JPanel
のサイズを変更する方法はありますか?スクロールバーが表示されたら、ボタンの隣にうまく表示されますか?または、JPanel
の横にスクロールバーを表示させる方法はありますか?
ありがとうございます!
EDIT:ここに私の問題のデモがあります。ウィンドウを小さな高さにリサイズすると、右側のボタンのほんの一部が覆われます。
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
EDIT: 私はそれがあなたのケースで仕事をしていないかもしれないと思った。ここ
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
/**
* @author Dylan Kiss
*/
public class Demo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame myFrame = new JFrame("Demo");
JPanel sideBar = new JPanel();
JPanel centerPanel = new JPanel();
centerPanel.add(new JLabel("This is the center panel."));
JPanel buttonContainer = new JPanel();
JButton myButton = null;
for (int i = 0; i < 20; i++) {
buttonContainer.setLayout(new GridLayout(20, 1, 0, 0));
myButton = new JButton("This is my button nr. " + i);
buttonContainer.add(myButton);
}
sideBar.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane(buttonContainer);
sideBar.add(scrollPane);
myFrame.getContentPane().add(sideBar, BorderLayout.WEST);
myFrame.getContentPane().add(centerPanel, BorderLayout.CENTER);
myFrame.setLocationByPlatform(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
あなたがSSCCEを提供してもらえますか? – StanislavL
大きなプロジェクトの一部です。私は問題の簡単なデモを提供しようとします。 – dylan202
@StanislavL新規ユーザーの場合は、[SSCCE](http://sscce.org/)とリンクする方が良いと思います! :) – COD3BOY