パネルをスクロールするjscrollpane
-
22-07-2019 - |
質問
私はアプレットを書く必要があり、左側ではパネルを使用してボタンのリストになり得る車両のリストを含める必要があります、問題は何ですか、車両の数は与えられません!!! そのため、車両の数が多すぎるときにパネルをスクロールする必要があります
iはjframeに対してこれを行いますが、パネルでは正しく動作しませんでした。例を参考にしてください
スクロールパネルに使用するコードは次のとおりです:
public class VehicleList extends JPanel {
private ArrayList<VehicleReport> vehicles;
private ArrayList<JButton> v_buttons = new ArrayList<JButton>();
public void showList(ArrayList<Vehicles> vehicles)
{
this.vehicles = vehicles;
//...
add(getScrollpane());
setSize(155,300);
}
public JScrollPane getScrollpane()
{
JPanel panel = new JPanel();
panel.setPreferredSize(new DimensionUIResource(150, 300));
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraint = new GridBagConstraints();
panel.setLayout(gridbag);
constraint.fill = GridBagConstraints.HORIZONTAL;
JLabel title = new JLabel("Vehiles list");
constraint.gridwidth = 2;
constraint.gridx = 0;
constraint.gridy = 0;
constraint.ipady = 230;
gridbag.setConstraints(title, constraint);
panel.add(title);
// end of set title
constraint.gridwidth = 1;
int i=1;
for(JButton jb : v_buttons )
{
constraint.gridx =0;
constraint.gridy = i;
gridbag.setConstraints(jb, constraint);
panel.add(jb);
JLabel vehicle_lable = new JLabel("car" + i);
constraint.gridx = 1;
constraint.gridy = i;
gridbag.setConstraints(vehicle_lable, constraint);
panel.add(vehicle_lable);
i++;
}
JScrollPane jsp = new JScrollPane(panel);
return jsp;
}
}
jscrollpaneをjframeに追加した後のjaframeでこれを配置します
pack();
setSize(250、250);
setLocation(100、300);
そしてそれは明確に動作します!!!!
解決
また、VehicleList JPanelのレイアウトマネージャーも表示しません。設定しない場合は、デフォルトでFlowLayoutになります。これは、コンテンツペインがデフォルトでBorderLayoutになっているJFrame(これが機能することを述べた)とは異なります。そのため、関連するコードを次から変更する必要があるだけです。
//...
add(getScrollpane());
to
//...
setLayout(new BorderLayout());
add(getScrollpane(), BorderLayout.CENTER);
他のヒント
水平および垂直にスクロールポリシーを設定する必要があります:
public void setHorizontalScrollBarPolicy(int policy)
public void setVerticalScrollBarPolicy(int policy)
使用方法:
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
そして:
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
JScrollPane.VERTICAL_SCROLLBAR_NEVER
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
したがって、たとえば:
jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
所属していません StackOverflow