我正在为我的大学项目创建GUI,并且我试图了解JScrollPane
的工作原理。
我已经成功编写了一个简单的程序,以可滚动的方式显示图片:
public class ScrollPaneTest{
public static void main(String[] args){
JFrame testFrame = new JFrame("ramka testowa");
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel picture = new JLabel(new ImageIcon("JavaSwingCompoentsList.PNG"));
JScrollPane scrollPane = new JScrollPane(picture);
testFrame.add(scrollPane, BorderLayout.CENTER);
testFrame.setSize(400, 400);
testFrame.setVisible(true);
}
}
虽然在我的最终图形用户界面中,我想仅将JScrollPane
应用于其中的一部分,例如单JPanel
。为了测试这个想法,我编写了以下代码,遗憾的是这些代码不起作用:
public class ScrollPaneTest{
public static void main(String[] args){
JFrame testFrame = new JFrame("ramka testowa");
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel picture = new JLabel(new ImageIcon("JavaSwingCompoentsList.PNG"));
JScrollPane scrollPane = new JScrollPane(picture);
JPanel insidePanel = new JPanel();
insidePanel.add(scrollPane);
testFrame.add(insidePanel, BorderLayout.CENTER);
testFrame.setSize(400, 400);
testFrame.setVisible(true);
}
}
我已经阅读了大量的教程,以及Stack和CodeRanch的文章,但我仍然没有理解JScrollPane
如何工作。我怀疑,我的错误与指定JPanel
的尺寸有关 - 滚动,但我试过的每一种方法都没有给我滚动条或根本没有图片。
如果你能告诉我这个问题的正确解决办法,最重要的是,请告诉我错误的地方,我将非常感激。
答案 0 :(得分:3)
JPanel
,而不是JScrollPane
要将JPanel
添加到JScrollPane
,请执行:
scrollPane.setViewportView (panel)
将JScrollPane
,而非JPanel
添加到JFrame
答案 1 :(得分:2)
最简单的方法是创建JPanel并在创建JScrollPane时指定它:
JPanel myPanel = ...;
JScrollPane scroller = new JScrollPane( myPanel );
然后只需将滚动条添加到GUI(而不是添加myPanel)。
答案 2 :(得分:2)
问题似乎来自内部面板的默认<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
app:cardCornerRadius="4dp"
app:cardElevation="16dp"
android:foregroundTint="@color/colorPrimary"
android:layout_margin="8dp">
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@color/colorPrimary">
<TextView
android:id="@+id/image_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:textColor="@color/White"
android:textSize="60sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/price_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="18sp"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:layout_alignParentBottom="true"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
/>
<TextView
android:id="@+id/district_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:textColor="#000000"
android:textSize="16sp"
android:layout_above="@+id/price_card"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"/>
<TextView
android:id="@+id/date_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="9.5sp"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:layout_alignBaseline="@+id/price_card"
android:layout_alignBottom="@+id/price_card"
android:layout_alignEnd="@+id/district_card"
android:layout_alignRight="@+id/district_card"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
。将其更改为另一个布局(我使用FlowLayout
),它应该工作。话虽如此,我无法解释为什么流程布局失败!
BordeLayout