How to set a ScrollBar at the top of a JPanel - java

I am trying to insert a JScrollPane in a JPanel. By default, when I open the panel, the scrollbar is set at the bottom. What I want is the opposite, to set it at the top of the pannel.
I have tried the commands scrollBar.getVerticalScrollBar().setValue(0) and JPanel.add(scrollBar, BorderLayout.NORTH), but thet do not work.
The code I have is:
JPanel panel=new JPanel();
texto = new ReportPanel();
texto.setEditable(false);
panel.add(texto, BorderLayout.NORTH);
JScrollPane scrollBar=new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.add(scrollBar);

Related

How to make frame automatically resize with window?

When I resize the window, the scroll frame doesnt resize with it and just goes out of frame.
Is there any way to fix this? Here's a snippet of the code:
TextEditor(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Emu Editor J");
this.setSize(700,550);
this.setResizable(true);
this.setLayout(new FlowLayout());
this.setLocationRelativeTo(null);
textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setFont(new Font("Cascadia Code",Font.PLAIN,20));
scrollPane = new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(this.getWidth()-25,this.getHeight()-100));
// scrollPane.setSize(this.getWidth()-25,this.getHeight()-100);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
I tried allowing resizable and it didn't work
Try using BorderLayout and add the panel to it with BorderLayout.CENTER.

Why is my scrolling textarea in java not scrolling?

I have a frame f, panel Fpanel. and textarea j.
This is a part of my code.
The scroll does not seem to be working on my text area.
JTextArea j=new JTextArea();
j.setBounds(60,150, 400,400);
j.setMargin(new Insets(3,3,3,3));
j.setEditable ( false ); // set textArea non-editable
JScrollPane scroll = new JScrollPane(j);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
I have added
Fpanel.add(scroll);
and
f.add(Fpanel);
to my code as well but it does not seem to be scrolling.
Am I missing a piece of the code or have I written something incorrectly?
if you want to have a vertical scroll bar:
JPanel panel = new JPanel();
JScrollPane jsp = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
if you want to have a horizontal scroll bar:
JPanel panel = new JPanel();
JScrollPane jsp = new JScrollPane(panel, ScrollPaneConstants.HORIZONTOL_SCROLLBAR_ALWAYS, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

My JTextArea's are not respecting the size of the component and are being cut off

I have been working on this for hours. I honestly cannot figure it out. I have JTextArea's inside a JSplitPane which is inside a JPanel with a JButton and all that is put in my JFrame. I am using Layout managers. I have tried using pack(). I have tried using preferred sizes. Without the JPanel my button does not display in the proper location or switch buttons in other Tabs. With the JPanel it cuts off all my text, stops the scroll function(yes I have tried setting the TextAreas to always have horizontal and vertical scroll bars...does not solve the problem where text just stops wrapping for no apparent reason).
public static void main(String[] args) throws IOException
{
JFrame frame = new JFrame();
Deck blackjack = new Deck(Deck.TYPE[0]);
JTextArea textBlackjackUnshuffled = new JTextArea();
JTextArea textBlackjackShuffle = new JTextArea();
JButton shuffleButtonBlackjack = new JButton(new ImageIcon(ImageIO.read(new File("res/shuffle.png"))));
JToolBar toolBarBlackjack = new JToolBar("Blackjack");
JSplitPane splitPaneBlackjack = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
JPanel panel = new JPanel();
JTabbedPane tabbedPaneBlackJack = new JTabbedPane();
JTabbedPane tabbedPaneCanasta = new JTabbedPane();
JTabbedPane tabbedPanePinochle = new JTabbedPane();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
textBlackjackUnshuffled.setColumns(10);
textBlackjackUnshuffled.setLineWrap(true);
textBlackjackUnshuffled.setWrapStyleWord(true);
textBlackjackUnshuffled.setEditable(false);
textBlackjackUnshuffled.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
textBlackjackUnshuffled.append(blackjack.toString());
textBlackjackShuffle.setColumns(10);
textBlackjackShuffle.setLineWrap(true);
textBlackjackShuffle.setWrapStyleWord(true);
textBlackjackShuffle.setEditable(false);
textBlackjackShuffle.setFont(new Font("DejaVu Sans", Font.PLAIN, 100));
textBlackjackShuffle.append(blackjack.toString());
shuffleButtonBlackjack.setBorderPainted(false);
shuffleButtonBlackjack.setFocusPainted(false);
shuffleButtonBlackjack.setContentAreaFilled(false);
splitPaneBlackjack.add(new JScrollPane(textBlackjackUnshuffled));
splitPaneBlackjack.add(new JScrollPane(textBlackjackShuffle));
panel.add(splitPaneBlackjack, BorderLayout.CENTER);
panel.add(shuffleButtonBlackjack, BorderLayout.PAGE_END);
tabbedPaneBlackJack.addTab("Blackjack", panel);
frame.add(tabbedPaneBlackJack);
frame.setSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
frame.setVisible(true);
}
You're adding the JScrollPanes to the panel in BorderLayout positions, but have not set the layout manager of panel to BorderLayout. In this situation, panel will be using JPanel's default layout manager, FlowLayout, a manager which is not smart enough to respect the scroll pane's preferred sizes.
Your code needs:
panel.setLayout(new BorderLayout());

Scrollable JPanel to return to the top of the panel after an event

I have a scrollable JPanel which accepts other JPanels dynamicly.
scrollPane = new ScrollPane();
jPanel2 = new JPanel();// container jPanel
jPanel2.setBackground(Color.pink);
jPanel2.setLayout(new GridLayout(0, 1));
scrollPane.add(jPanel2);
add(scrollPane, BorderLayout.CENTER);
the program can add and delete JPanels to this JPanel and it will scroll. when the JPanel is getting bigger and you add another JPanel i would like the Container JPanel to have the scroll bar at the top.

Control sizing of JPanel

I have a typical IDE style window with a top JMenuBar and JToolBar,
a large center console and a bottom status bar.
Here are the main parts of the code:
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel topPanel = new JPanel();
. (JMenuBar and JToolBar)
.
mainPanel.add(topPanel, BorderLayout.NORTH);
cardPanel = new JPanel();
cardPanel.setLayout(cardLayout);
.
.
Dimension minDimension = new Dimension(680, 400);
Dimension maxDimension = new Dimension(750, 800);
JPanel centerPanel = new JPanel();
centerPanel.setMinimumSize(minDimension);
centerPanel.setPreferredSize(minDimension);
centerPanel.setMaximumSize(maxDimension);
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
centerPanel.add(cardPanel);
mainPanel.add(centerPanel, BorderLayout.CENTER);
mainPanel.add(statusBar, BorderLayout.SOUTH);
I want to be able to control the sizing of the whole window,
with a minimum and maximum size.
I thought I could have the 'centerPanel' JPanel as a BoxLayout,
so I could have some control over it, but as it is, I can't
control the sizing of the window at all.
I tried to make the 'mainPanel' use a BoxLayout, instead of a BorderLayout, but there
where too many issues.
Is the main BorderLayout causing it to "ignore" the sizing?
I know that the parts, other than the center, have some sizing
control, that's why I tried to use a BoxLayout in the center.
Is it possible to keep the BorderLayout, and get it to work,
with some other modifications, or would I need to switch to some other Layout Manager?
Thanks!

Categories

Resources