Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Layout BorderPane and allow scroll of TableView

zorro2bMay 20 2017 — edited May 22 2017

I am trying to layout an application with a central tableview within a borderpane.

The top is used for the menu, the centre for the tableview which grows to use all available space and the bottom for the footer.

You can see it in action here:

https://www.youtube.com/watch?v=6-0YFMwa4RA

You can see that the tableview increases size nicely with the window, but when the window shrinks the tableview is truncated and no scrollbar is displayed to allow viewing of all of the content.

The other more minor issue is that the logo in the footer also gets truncated whereas I would like it always to be shown at the right side of the footer area.

Here is my layout:

https://gist.github.com/zorro2b/a3db62dd5d382be767a70a8142a0fb16

Is there any way to achieve this layout with the header and footer and such that the table view takes available space but if the window becomes too small it adds scrollbars?

thanks,

Andrew

Comments

843804
Extend your own JTextArea :)
843804
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.border.*;

public class CentredBackgroundBorder implements Border {
    private final BufferedImage image;

    public CentredBackgroundBorder(BufferedImage image) {
        this.image = image;
    }

    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        x += (width-image.getWidth())/2;
        y += (height-image.getHeight())/2;
        ((Graphics2D) g).drawRenderedImage(image, AffineTransform.getTranslateInstance(x,y));
    }

    public Insets getBorderInsets(Component c) {
        return new Insets(0,0,0,0);
    }

    public boolean isBorderOpaque() {
        return true;
    }

    //demo
    public static void main(String[] args) throws IOException {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JTextArea area = new JTextArea();
        area.setForeground(Color.GREEN);
        area.setOpaque(false);
        area.read(new FileReader("CentredBackgroundBorder.java"), null);
        String url = "http://today.java.net/jag/bio/JagHeadshot.jpg";
        JScrollPane sp = new JScrollPane(area);
        sp.getViewport().setOpaque(false);
        sp.setViewportBorder(new CentredBackgroundBorder(ImageIO.read(new URL(url))));

        JFrame f = new JFrame("BackgroundBorderExample");
        f.getContentPane().add(sp);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(600,400);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
843804
Thank you for your help !!^^
1 - 3
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Jun 19 2017
Added on May 20 2017
1 comment
1,500 views